package git

//git文件操作


/*


	GIT文件操作

			文件4种状态

			版本控制就是对文件的版本控制，要对文件进行修改、提交等操作，首先要知道文件当前在什么状态，不然可能会提交了现在还不想提交的文件，或者要提交的文件没提交上。
				.Untracked:未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制.通过git add状态变为Staged
				·Unmodify:文件已经入库,末修改,即版本库中的文件快照内容与文件夹中完全一致.这种类型的文件有两种去处,如果它被修改,而变为Modified.如果使用git rm移出版本库,则成为untracked文件
				·Modified:文件已修改,仅仅是修改,并没有进行其他的操作.这个文件也有两个去处,通过git add可进入暂存staged状态,使用git checkout则丢弃修改过,返回到unmodify状态,这个git checkout即从库中取出文件,覆盖当前修改!
				·Staged:暂存状态.执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为unmodify状态.执行git reset HEAD filename取消暂存,文件状态为Modified



			查看文件状态,上面说文件有4种状态，通过如下命令可以查看到文件的状态︰
			#查看指定文件状态
			git status [fi1ename]
			#查看所有文件状态|
			git status





		忽略文件
		有些时候我们不想把某些文件纳入版本控制中，比如数据库文件，临时文件，设计文件等
		在主目录下建立".gitignore"文件，此文件有如下规则:

		1.忽略文件中的空行或以井号（#）开始的行将会被忽略。
		2.可以使用Linux通配符。例如︰星号(*)代表任意多个字符，问号( ﹖)代表一个字符，方括号( [abc])代表可选字符范围，大括号({string1,string2..…})代表可选的字符串等。
		3.如果名称的最前面有一个感叹号( !)，表示例外规则，将不被忽略。
		4.如果名称的最前面是一个路径分隔符(/ )，表示要忽略的文件在此目录下，而子目录中的文件不忽略。
		5.如果名称的最后面是一个路径分隔符(/)，表示要忽略的是此目录下该名称的子目录，而非文件（默认文件或目录都忽略）。只会生成目录，但子文件并不上传


		#为注释
		*.txt		#忽略所有.txt结尾的文件
		!lib.txt	#但lib.txt除外
		/temp		#仅忽略项目根目录下的temp文件,不包括其它目录vider/temp
		build/		#忽略build/目录下的所有文件
		doc/*.txt	#会忽略doc/notes.txt但不包括 doc/server/arch.txt


		文件和代码整个版本的形成过程，是不可逆也不可跳跃，不能直接commit就形成版本，而是必须通过add




		总结:
		如果要进行版本回退或前进，一般分两步:
		1)通过git log或 git reflog查看操作日志，查找版本的commit id
		2)通过git reset --hard <commit id>设置HEAD到指定版本


		其实版本的回退，仅仅是修改HEAD指针的位置而己，因此Git进行版本的切换，比svn要快的多!




*/
